//import wx from 'weixin-js-sdk'  //npm install weixin-js-sdk --sava
import apis from "@/apis/index.js";//全局API
import utils from "@/utils/utils";

class AuthWechat {
  signLink() {
    if (typeof window.entryUrl === 'undefined' || window.entryUrl === '') {
      window.entryUrl = document.location.href
    }
    return /(Android)/i.test(navigator.userAgent) ? document.location.href : window.entryUrl;
  }

  // 当前是否是微信环境
  isWeixin() {
    return navigator.userAgent.toLowerCase().indexOf("micromessenger") !== -1;
  }

  /**
   * 初始化wechat(分享配置)
   */
  async wechat(query) {
    let result = await apis.wxSdkConfig({ url: this.signLink() })
    let wxConfig = {
      debug: result.debug, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
      appId: result.appId, // 必填，公众号的唯一标识
      timestamp: result.timestamp, // 必填，生成签名的时间戳
      nonceStr: result.nonceStr, // 必填，生成签名的随机串
      signature: result.signature, // 必填，签名
      jsApiList: [
        //'updateAppMessageShareData', // 自定义“分享给朋友”及“分享到QQ”按钮的分享内容
        //'updateTimelineShareData', // 自定义“分享到朋友圈”及“分享到QQ空间”按钮的分享内容（1.4.0）
        'scanQRCode', // 扫一扫
        'getLocation', // 获取地理位置
        'openLocation', // 使用微信内置地图查看位置接口
        'chooseImage', //拍照或从手机相册中选图接口
        'closeWindow', //关闭当前网页窗口接口
        'chooseInvoiceTitle',//获取微信发票抬头
      ]
    }
    if (query) { for (let key in query) { wxConfig[key] = query[key] } }
    return new Promise((resolve, reject) => {
      jWeixin.config(wxConfig)
      jWeixin.ready(() => {
        // 微信SDK准备就绪后执行的回调。
        resolve(true)
      })
      jWeixin.error(err => {
        reject(err)
      })
    })
  }

  // 微信分享
  wxShare(shareObj) {
    this.wechat().then((wx, res) => {
      wx.ready(() => {
        wx.updateAppMessageShareData({
          title: shareObj.title,
          desc: shareObj.details,
          link: this.signLink(),
          imgUrl: shareObj.imageUrl.includes("https") ? shareObj.imageUrl : `https:${shareObj.imageUrl}`,
          //imgUrl: "https://m.laicai.demo.seenlove.com/app/profile.jpg",
          success: function(e) {
            console.log("updateAppMessageShareData成功了", e)
          },
          cancel: function(e) {
            console.log("updateAppMessageShareData失败的原因", e)
          }
        });
        wx.updateTimelineShareData({
          title: shareObj.title,
          desc: shareObj.details,
          link: this.signLink(),
          imgUrl: shareObj.imageUrl.includes("https") ? shareObj.imageUrl : `https:${shareObj.imageUrl}`,
          //imgUrl: "https://m.laicai.demo.seenlove.com/app/profile.jpg",
          success: function(e) {
            console.log("updateTimelineShareData成功了", e)
          },
          cancel: function(e) {
            console.log("updateTimelineShareData失败的原因", e)
          }
        });
      })
    })
  }


  // 扫一扫
  scanQRCode() {
    return new Promise((resolve, reject) => {
      this.wechat().then((wx, res) => {
        this.toPromise(wx.scanQRCode, {
          needResult: 1, // 默认为0，扫描结果由微信处理，1则直接返回扫描结果，
          scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码，默认二者都有
        }).then(res => {
          resolve(res);
        }).catch(err => {
          reject(err);
        });
      })
    })
  }

  // 获取地理位置接口
  getLocation() {
    return new Promise((resolve, reject) => {
      this.wechat().then((wx, res) => {
        this.toPromise(wx.getLocation, {
          type: 'wgs84', // 默认为wgs84的gps坐标，如果要返回直接给openLocation用的火星坐标，可传入'gcj02'
        }).then(res => {
          resolve(res);
        }).catch(err => {
          reject(err);
        });
      })
    })
  }

  // 使用微信内置地图查看位置接口
  openLocation(data) {
    return new Promise((resolve, reject) => {
      this.wechat().then((wx, res) => {
        this.toPromise(wx.openLocation, {
          latitude: data.latitude, // 纬度，浮点数，范围为90 ~ -90
          longitude: data.longitude, // 经度，浮点数，范围为180 ~ -180。
          name: '', // 位置名
          address: '', // 地址详情说明
          scale: 1, // 地图缩放级别,整型值,范围从1~28。默认为最大
          infoUrl: '' // 在查看位置界面底部显示的超链接,可点击跳转
        }).then(res => {
          resolve(res);
        }).catch(err => {
          reject(err);
        });
      })
    })
  }

  // 拍照或从手机相册中选图接口
  async chooseImage(count) {
    await this.wechat()
    return new Promise((resolve, reject) => {
      jWeixin.chooseImage({
        count: count || 1,
        sizeType: ['original', 'compressed'],
        sourceType: ['album', 'camera'],
        success: res => {
          resolve(res.tempFilePaths)
        }
      })
    })
  }

  //判断当前客户端版本是否支持指定JS接口
  async checkJsApi(content) {
    return new Promise((resolve, reject) => {
      jWeixin.checkJsApi({
        jsApiList: [content], // 需要检测的JS接口列表，所有JS接口列表见附录2,
        success: function(res) {
          // 以键值对的形式返回，可用的api值true，不可用为false
          // 如：{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
          if (res.checkResult && res.checkResult[content]) {
            resolve(res.checkResult[content])
          } else {
            resolve(false)
          }
        }
      });
    })
  }

  //获取发票抬头
  async chooseInvoiceTitle() {
    await this.wechat({ beta: true })
    let resp = await this.checkJsApi("chooseInvoiceTitle")
    if (!resp) return utils.showToast("不支持获取发票抬头")
    return new Promise((resolve, reject) => {
      jWeixin.invoke('chooseInvoiceTitle', {
        "scene": "2"
      }, (res) => {
        // 这里处理调用结果
        //{ "type":"0", "title":"腾讯科技(深圳)有限公司", "taxNumber":"123466789987646131", "companyAddress":"深圳市南山区某某路腾讯大厦", "telephone":"123456789", "bankName":"某某银行", "bankAccount":"621111111111290" }
        if (res.choose_invoice_title_info) {
          resolve(JSON.parse(res.choose_invoice_title_info))
        }
      })
    });
  }

  // 关闭当前网页窗口接口
  async closeWindow() {
    await this.wechat()
    jWeixin.closeWindow();
  }



  toPromise(fn, config = {}) {
    return new Promise((resolve, reject) => {
      fn({
        ...config,
        success(res) {
          resolve(res);
        },
        fail(err) {
          reject(err);
        },
        complete(err) {
          reject(err);
        },
        cancel(err) {
          reject(err);
        }
      });
    });
  }
  // 如果你需要添加新的方法，请查下步骤5
}


export default new AuthWechat();

